package com.zjsru.plan2024.normal;

/**
 * 2784. 检查数组是否是好的
 *
 * @Author: cookLee
 * @Date: 2024-10-28
 */
public class IsGood {

    /**
     * 主
     * \
     * 输入：nums = [2, 1, 3]
     * 输出：false
     * 解释：因为数组的最大元素是 3 ，唯一可以构成这个数组的 base[n] 对应的 n = 3 。但是 base[3] 有 4 个元素，但数组 nums 只有 3 个元素，所以无法得到 base[3] = [1, 2, 3, 3] 的排列，所以答案为 false 。
     * \
     * 输入：nums = [1, 3, 3, 2]
     * 输出：true
     * 解释：因为数组的最大元素是 3 ，唯一可以构成这个数组的 base[n] 对应的 n = 3 ，可以看出数组是 base[3] = [1, 2, 3, 3] 的一个排列（交换 nums 中第二个和第四个元素）。所以答案为 true 。
     * \
     *
     * @param args args
     */
    public static void main(String[] args) {
        IsGood isGood = new IsGood();
        int[] nums = new int[]{1, 3, 3, 2};
        System.out.println(isGood.isGood(nums));
    }

    /**
     * 模拟
     *
     * @param nums nums
     * @return boolean
     */
    public boolean isGood(int[] nums) {
        if (nums.length < 1) {
            return false;
        }
        int len = nums.length;
        int[] count = new int[len + 1];
        for (int num : nums) {
            //排除最后一位
            if (num > len - 1 || (num < len - 1 && count[num] > 0)) {
                return false;
            }
            count[num]++;
        }
        return count[len - 1] == 2;
    }

}
